<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>引用数据类型传参</title>
  <script>
    // 复杂数据类型传参

    // 函数的形参也可以看做是一个变量，当我们把引用类型变量传给形参时，其实是把变量在栈空间里保存的堆地址复制给了形参，形参和实参其实保存的是同一个堆地址，所以操作的是同一个对象。
    function Person (name) {
      this.name = name
    }

    function f1 (x) { // x = p
      console.log(x.name) // 2. 这个输出什么 ?  刘德华
      x.name = '张学友'
      console.log(x.name) // 3. 这个输出什么 ?   张学友
    }

    var p = new Person('刘德华')
    console.log(p.name) // 1. 这个输出什么 ?   刘德华
    f1(p)
    console.log(p.name) // 4. 这个输出什么 ?   张学友
  </script>
</head>
<body>

</body>
</html>